<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="description" content="A taglib that helps rapidly develop data driven web applications. It offers both JSP tag library and a Java API for data manipulation. Works with various DB engines. Open source, under LGPL.">
   <meta name="Author" content="Stefan Baebler">
   <meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
   <title>Makumba</title>
   <link rel="stylesheet" type="text/css" media="all" href="main.css">
   <script type="text/javascript" src="main.js"></script>
</head>
<body>
<script type="text/javascript">
   makeNavBar("");
</script>

<br>
<center>
<a href="http://www.makumba.org" title="Makumba"><img src="makumba-logo.gif" alt="Makumba" border="0" style="border: 0px solid ; width: 329px; height: 100px;"></a></center>
<p>
<b>Makumba</b> is a query-centric technology designed by <a href="http://www.BEST.eu.org" title="Board of European Students of Technology">BEST</a>
that helps you to rapidly develop web applications that keep their data in a database (i.e. data driven web applications). It is implemented in Java and offers a <abbr title="Java Server Pages">JSP</abbr>
tag library and a Java <abbr title="Application Programmer's Interface">API</abbr> to the web app developer. The technology has been in use since late 2001, and is being further developed, based on users'
experience and requests.
</p>
<h2><a href="http://blog.makumba.org">Latest news</a></h2><br>
<script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAA4S0NyQM_MPYFf9-LhtovERTcvXk0HanODBtOBBHGCilvK7z5uBSQnt_0gT9ERxLe3GqYHSt2iE5gKg"></script>
<script type="text/javascript">
google.load("feeds", "1");
function OnLoad() {
   var feedControl = new google.feeds.FeedControl();
   feedControl.addFeed("http://blog.makumba.org/?feed=rss2");
   feedControl.setNumEntries(2);
   feedControl.draw(document.getElementById("feedControl"));
}
google.setOnLoadCallback(OnLoad);
</script>
<div id="feedControl">Loading...</div>
<br>

<h2>Short introduction</h2>
<p>
Makumba's main elements are:<br>
<ul>
<li><b>Makumba List</b>, an intuitive way of iterating over data records and which automatically formats the display according to the data type and the subtype.</li>
<li><b>Makumba Forms</b>, making it possible to build nested forms without having to worry how the data gets stored or the form gets rendered</li>
<li><b>Makumba Data Definitions</b>, a very simple yet powerful abstraction of data types which make data modelling very easy</li>
</ul>
</p>
<p>
<b>Makumba</b> is built around <a href="http://www.odmg.org/">OQL</a> (Object Query Language) and we are working on intergrating support for <a href="http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html">HQL</a> (<a href="http://www.hibernate.org/">Hibernate</a> Query Language) as well as <a href="http://www.hibernate.org/hib_docs/reference/en/html/mapping.html">Hibernate mappings</a>.
</p>


<p>
If you are interested in Makumba you might want to take a look to <a href="http://sourceforge.net/projects/parade"><b>ParaDe</b></a>, a Parallel Development
environment. <i>The only thing you need is an internet connection and a browser to develop your application!</i>
</p>

<p>
<b>Makumba</b> is open source and the product of the volunteer work
of individuals who have a background in the IT Committee of BEST. Everyone is
welcome to use and contribute to Makumba.
</p>

<table BORDER="0" CELLSPACING="0" CELLPADDING="5" WIDTH="90%" BGCOLOR="#e0ffe0" align=center>
<tr>
<td>
<div align=left><big><b>Description of Makumba around a short example</b></big></div>
<p>
First you <b>describe the data</b> in a text file, called
<a href="makumba-spec.html#Data_Description">Makumba Data
Definition</a>. It contains lines like:
</p>

<pre class="example">
name= char[30]                   ;Name
dob= date                        ;Date of birth
addresses= set                   ;Addresses of the person
addresses-> city = char[40]      ;City
addresses-> phone_number = int  ;Phone number
</pre>

<p>
Say you call the above record a "Person". Makumba
can use this information to perform the right action when
manipulating the database or generating HTML output.
Of course, complex applications have more types of data, with pointers from one to the other.
</p>
<p>Makumba can <b>generate SQL</b> statements that create the needed tables and
do read/write operations in a <a href="SQL-drivers.html">database</a>
of your choice. It currently supports MySQL, Informix, DB2, PostgreSQL and ODBC but many
other database engines can be easily supported if needed.
</p>

<p>At the interface level, Makumba can <b>generate html</b>
for inserting, editing, viewing and deleting data from the
database. You don't have to care about details of HTML forms, parsing
the CGI arguments, composing SQL statements etc.
All this routine work is done for you, but you can freely build upon it.<br>
</p>
<p>For instance, following code will show a list of persons and their phone numbers. You mix HTML
  and Makumba jsp tags to get the desired view.</p>

<pre class="example">
&lt;mak:list from="general.Person p, p.addresses a" where="a.city = 'Vienna'"&gt;
  &lt;b&gt;&lt;mak:value expr="p.name"/&gt;&lt;/b&gt; was born on &lt;mak:value expr="p.dob"/&gt;&lt;br&gt;
  Phone numbers:
  &lt;mak:list from="a.phone_number n" separator=", "&gt;
    &lt;mak:value expr="n"/&gt;
  &lt;/mak:list&gt;
&lt;/mak:list&gt;
</pre>

<p>Makumba will generate the appropriate queries needed to display the result and optimise them so as to execute the least possible number of queries, in order to increase performance.</p>

            <p>If you wish to add a new Person to your database, you can just
write the following code. It takes care of creating an input form in HTML,
and arranges for all necessary database commands to be performed after submit
(including the creation of subrecords, in our example a new address object).
            </p>

<pre class="example">
&lt;mak:newForm type="general.Person" name="person" action="listPersons.jsp"&gt;
        Name : &lt;mak:input name="name"/&gt; &lt;br&gt;
        Date of birth : &lt;mak:input name="dob"/&gt;
        &lt;mak:addForm object="person" field="addresses"&gt;
          Phone number: &lt;mak:input field="phone_number"/&gt;
        &lt;/mak:addForm&gt;
&lt;/mak:newForm&gt;
</pre>

            <p>Makumba will choose appropriate input controls for each datatype,
as indicated by the data definition  above. </p>

            <p>Behind the HTML pages, developers can optionally write "business
logic" in Java that adds certain operations to the basic actions (insert,
edit, delete). For this, the full power of Java, enhanced with the <a href="api/org/makumba/package-summary.html">Makumba
API</a> for e.g. database handling, is available.</p>

<p>
You can see more in a slightly more detailed <a href="makumba-example.html">example</a>.
</td>
</tr>
</table>

 <p>So more or less this is it. Makumba was inspired by Lotus Notes, but we found
it impossible to use Lotus Notes because of visual programming (rather than plain
ext files) and other problems. Other tools (say MS Access) have similar
problems, plus we don't want to be dependent on one technology. We want to
work with plain text files because it's easy to cooperate at a distance using
them. We want everything to be simple for the web app developer.
That's why all routine actions are handled by Makumba.</p>

<div class="note">These webpages might be a bit out-of-date,
as most our efforts are going to using, developing and designing future enhancements
of Makumba. We apologize for that.</div>


<h4>Worldwide mirrors</h4>

<a href="http://ee.makumba.org" title="Estonia">EE</a>,
<a href="http://ee2.makumba.org" title="Estonia 2">EE2</a>,
<a href="http://ro.makumba.org" title="Romania">RO</a>,
<a href="http://si.makumba.org" title="Slovenia">SI</a>,
<a href="http://us.makumba.org" title="United States">US</a><br>
<A href="http://sourceforge.net/projects/makumba"><IMG src="http://sourceforge.net/sflogo.php?group_id=25704" width="88" height="31" border="0" alt="SourceForge Logo"></A>

<br>
<div align="right"><font size="1">2001-2008</font></div>

<script type="text/javascript">
   makeFooter("$Id$");
</script>
</body>
</html>
